package day0401;

import java.util.*;

public class SimpleMemoryPool33 {
    /**
     * 有一个简易内存池，内存按照大小粒度分类，每个粒度有若干个可用内存资源，用户会进行
     * 一系列内存申请，需要按需分配内存池中的资源，返回申请结果成功失败列表。分配规则如
     * 下：
     * 1、分配的内存要大于等于内存申请量，存在满足需求的内存就必须分配，优先分配粒度小
     * 的，但内存不能拆分使用。
     * 2、需要按申请顺序分配，先申请的先分配。
     * 3、有可用内存分配则申请结果为 true，没有可用内存分配则返回 false。
     * 注：不考虑内存释放。
     * 输入描述：
     * 输入为两行字符串：
     * 第一行为内存池资源列表，包含内存粒度数据信息，粒度数据间用逗号分割，一个粒度信息
     * 内部用冒号分割，冒号前为内存粒度大小，冒号后为数量。资源列表不大于 1024，每个
     * 粒度的数量不大于 4096
     * 第二行为申请列表，申请的内存大小间用逗号分隔。申请列表不大于 100000
     * 如：
     * 64:2,128:1,32:4,1:128
     * 50,36,64,128,127
     * 输出描述：
     * 输出为内存池分配结果。
     * 如：
     * true,true,true,false,false
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] pair = sc.nextLine().split(",");
        int[][] arr = new int[pair.length][2];
        for (int i = 0; i < pair.length; i++) {
            String[] s = pair[i].split(":");
            arr[i][0] = Integer.parseInt(s[0]);
            arr[i][1] = Integer.parseInt(s[1]);
        }
        int[] nums = Arrays.stream(sc.nextLine().split(",")).map(Integer::parseInt).mapToInt(Integer::intValue).toArray();
        Arrays.sort(arr, Comparator.comparingInt(o -> o[0]));
        boolean[] result = new boolean[nums.length];
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[j][0] >= nums[i] && arr[j][1] > 0) {
                    result[i] = true;
                    arr[j][1]--;
                    break;
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        for (boolean b : result) {
            sb.append(b).append(",");
        }
        System.out.println(sb.substring(0, sb.length() - 1));

    }

}

